//正则表达式基础
//正则基本代码

// \d匹配一个数字; \w匹配一个字母和数字; \s空白 空格之类
// * 表示任意个字符包括0个 + 表示至少一个字符 ?表示0个或者1个字符 {n}表示n个字符 {n,m}表示n-m个字符 .可以匹配任意字符
// 特殊字符需要转义 比如- 需要转义 使用\-
// []表示范围 [0-9a-zA-Z\_] 可以匹配一个数字、字母或者下划线
// A|B可以匹配A或B (J|j)ava(S|s)cript 可以匹配JavaScript Javascript javascript
// ^表示行的开头 ^\d表示以数字开头
// $表示行的结束 \d$表示以数字结束


//在js中使用正则表达式
// 两种方式创建 一种是通过/正则表达式/创建  另一种是new RegExp('正则表达式') 
var re1=/ABC\-001/;
var re2=new RegExp('ABC\\-001');

// 需要注意的是字符串需要转义 ,-也需要转义因此是\\

// 测试是否匹配
var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false

// 切分字符串
// 一般的切分代码
'a b   c'.split(' '); // ['a', 'b', '', '', 'c'] 
// 正则表达式 通过空格 字符 或者;来作为分割符
'a,b;; c  d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']

//提取字串 通过()分组的方式 然后使用exec函数即可提取分组
var re = /^(\d{3})-(\d{3,8})$/; //这里分了两组
re.exec('010-12345');// ['010-12345', '010', '12345']
re.exec('010 12345');//null 

//如果正则表达式定义了组，就可以在RegExp对象上用exec()方法提取出字串
//返回一个Array 第一个元素是正则表达式匹配到的整个字符串，后面的字符串表示匹配成功的子串


//设置匹配策略  默认的是贪婪匹配策略即：匹配尽可能多的字符
var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']
//因为\d+采取的是贪婪匹配策略 因此把所有数字都匹配上了 后续的0*就匹配不上了

//加上?来采取非贪婪匹配
var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']


//全局搜索
//全局搜索可以多次执行exec()方法来搜索一个匹配的字符串。当我们指定g标志后，每次运行exec(),正则表达式本身会
//更新lastIndex属性，表示上次匹配到的最后索引
//使用全局搜索的方式
var r1 = /test/g;
//或者
var r2 = new RegExp('test', 'g');


var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;

re.exec(s); // ['JavaScript']
re.lastIndex; // 10

re.exec(s); // ['VBScript']
re.lastIndex; // 20
// 全局匹配类似搜索，因此不能使用/^...$/，那样只会最多匹配一次

//其他 指定i标志代表忽略大小写 指定m标志 表示执行多行匹配
